﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data.Linq;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using DevExpress.XtraReports.UI;
using DevEx.Thanh .Class ;
using DevExpress.XtraGrid.Views.BandedGrid;
using DevEx.Thanh.reports;
using System.Data.SqlClient;
namespace DevEx.Thanh.UserControl
{
    public partial class ucKiemKe : DevExpress.XtraEditors.XtraUserControl
    {
        private CTonController ctrlTon = new CTonController();
        private CKiemKeController ctrlKK = new CKiemKeController();
        private ArrayList arrCapNhat = new ArrayList();
        public ucKiemKe()
        {
            InitializeComponent();
        }

        private void LayDuLieu()
        {
            gridKiemKe.DataSource = null;
            gridKiemKe.RefreshDataSource();
            int dotKiemKe = Convert.ToInt32(radDotKiemKe.EditValue);
            ISingleResult<sp_T_LayThongTinKiemKeResult> data = ctrlKK.LayThongTinKiemKe2(dotKiemKe);
            gridKiemKe.DataSource = data;
            //sửa 1 chút ở band header
            FormatKKGrid(dotKiemKe);
            ViewMode();
            
        }
        private void btThucHien_Click(object sender, EventArgs e)
        {
            Boolean thucHien = true;
            int dotKiemKe = Convert.ToInt32(radDotKiemKe.EditValue);
            //lấy thông tin kiem ke
            if (ctrlKK.CheckIfExist( dotKiemKe)== false)
            {
                thucHien = ThucHienKiemKe(dotKiemKe);
                //sau khi thực hiện kiểm kê xong thì lấy dữ liệu
                ctrlKK.RefreshData();
            }
            if (thucHien ) 
                LayDuLieu();
        } 
        private Boolean ThucHienKiemKe(int dotKiemKe)
        {
            //kiem tra so lieu
            ISingleResult<sp_T_KiemTraSoLieu_AllResult> kt = ctrlTon.KiemTraSoLieuAll();
            if (kt.Count() > 0)
            {
                //bao loi
                MessageBox.Show("Số liệu kế hoạch và thực hiện chưa khớp. Không thể thực hiện kiểm kê");
                return false;
            }
            else
            {
                //nếu là kiểm kê 1/1 thì yêu cầu chốt số liệu, chuyển số liệu đầu năm

                //thuc hien kiem ke
                ctrlKK.ThucHienKiemKe(dotKiemKe);
                return true;
            }
        }
        private void FormatKKGrid(int dotKiemKe)
        {
            int namTruoc = DateTime.Now.Year - 1;
            switch (dotKiemKe)
            {
                case 1:
                    gridBandSLKKOld.Caption = "SL KK 1/1/" + namTruoc.ToString( );
                    gridBandSLKKNew.Caption = "SL KK 1/1/" + DateTime.Now.Year .ToString( );
                    break;
                default:
                    gridBandSLKKOld.Caption = "SL KK 1/7/" + namTruoc.ToString( );
                    gridBandSLKKNew.Caption = "SL KK 1/7/" + DateTime.Now.Year .ToString( );
                    break;
            }
            colKho.Group();
            bandedGridView1.ExpandAllGroups();
            colKho.AppearanceCell.ForeColor = Color.Blue;
        }

        private void bandedGridView1_CustomColumnDisplayText(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs e)
        {
            string tenField = e.Column.FieldName;
            if (tenField.StartsWith("SL") && tenField != "SLKKOld" && tenField != "SLKK" && tenField != "SLSS")
            {
                if (Convert.ToDouble(e.Value.ToString()) == 0)
                {
                    e.DisplayText = "";
                }
            }
        }
        private void EditMode()
        {
            arrCapNhat.Clear();
            btEdit.Enabled = false;
            btGhi.Enabled = true;
            btHuy.Enabled = true;
            foreach (BandedGridColumn c in this.bandedGridView1.Columns)
            {
                if (c.Name.StartsWith("colEdit"))
                    c.OptionsColumn.AllowEdit = true;
            }
            //colSTT.OptionsColumn.AllowEdit = false;
        }
        private void ViewMode()
        {
            btEdit.Enabled = true;
            btGhi.Enabled = false;
            btHuy.Enabled = false;
            foreach (BandedGridColumn c in this.bandedGridView1.Columns  )
            {
                c.OptionsColumn.AllowEdit = false;
            }
        }

        private void ucKiemKe_Load(object sender, EventArgs e)
        {
            btEdit.Enabled  = false;
            btGhi.Enabled  = false;
            btHuy.Enabled = false;
            //hiển thị lại check chọn kiểm kê
            radDotKiemKe.Properties.Items[0].Description = "Kiểm kê ngày 1/1/" + DateTime.Now.Year.ToString ();
            radDotKiemKe.Properties.Items[1].Description = "Kiểm kê ngày 1/7/" + DateTime.Now.Year.ToString();

        }

        private void btEdit_Click(object sender, EventArgs e)
        {
            EditMode();
        }

        private void btGhi_Click(object sender, EventArgs e)
        {
            //thuc hien ghi thong tin o day
            //duyệt qua lần lượt từng dòng đc cập nhật
            foreach (int i in arrCapNhat)
            {
                try
                {
                    object row = bandedGridView1.GetRow(i);
                    sp_T_LayThongTinKiemKeResult temp = row as sp_T_LayThongTinKiemKeResult ;
                    int id = temp.ID_KiemKe;
                    tblKiemKe obj = ctrlKK.SelectRecordByID(id);
                    //cập nhật lại 1 số thông tin
                    obj.SLKK = temp.SLKK;
                    //obj.GiaKK = temp.GiaKK;
                    obj.SLTang = temp.SLTang;
                    obj.SLGiam = temp.SLGiam;
                    obj.SLThua = temp.SLThua;
                    obj.SLThieu = temp.SLThieu;

                   
                    obj.SLCCL1 = temp.SLCCL1;
                    obj.SLCCL2 = temp.SLCCL2;
                    obj.SLCCL3a = temp.SLCCL3a;
                    obj.SLCCL3b = temp.SLCCL3b;

                    obj.SLCSSX = temp.SLCSSX;
                    obj.SLKhoBo = temp.SLKhoBo;
                    obj.SLKhoDV = temp.SLKhoDV;

                    obj.SLDieuDi = temp.SLDieuDi;
                    obj.SLThanhLy = temp.SLThanhLy;

                    obj.GhiChu = temp.GhiChu;

                    //cap nhat
                    ctrlKK.UpdateWithoutAttach(obj);

                }
                catch (Exception)
                {
                    MessageBox.Show("Lỗi đọc dữ liệu");
                }
            }
            //ghi xong thi view mode
            ViewMode();
        }

        private void btHuy_Click(object sender, EventArgs e)
        {
            //lay lai du lieu cu
            LayDuLieu();
            // che do view mode
            ViewMode();
        }

        private void bandedGridView1_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
        {
            if(e.Column.Name =="colEditSLKK")
            {
                //cap nhat lai sl thừa thiếu
                //số lượng kiểm kê
                double slKK = Convert.ToDouble( e.Value);
                //cập nhật lại thành tiền
                double gia = Convert.ToDouble(bandedGridView1.GetRowCellValue(e.RowHandle, bandedGridView1.Columns["Gia"]));
                bandedGridView1.SetRowCellValue(e.RowHandle, bandedGridView1.Columns["TienKK"], slKK *gia);
                //số lượng kiểm kê kỳ trước
                double slkkOld = Convert.ToDouble(bandedGridView1.GetRowCellValue(e.RowHandle, bandedGridView1.Columns["SLKKOld"]));
               ////số lượng tăng giảm
               // if (slKK > slkkOld)
               // {
               //     bandedGridView1.SetRowCellValue(e.RowHandle, bandedGridView1.Columns["SLTang"], slKK - slkkOld);
               //     bandedGridView1.SetRowCellValue(e.RowHandle, bandedGridView1.Columns["SLGiam"], 0);
               // }
               // else
               // {
               //     bandedGridView1.SetRowCellValue(e.RowHandle, bandedGridView1.Columns["SLGiam"], slkkOld - slKK);
               //     bandedGridView1.SetRowCellValue(e.RowHandle, bandedGridView1.Columns["SLTang"], 0);
               // }
                //số lượng sổ sách
                double slss = Convert.ToDouble(bandedGridView1.GetRowCellValue(e.RowHandle, bandedGridView1.Columns["SLSS"]));
                if (slKK > slss )
                {
                    bandedGridView1.SetRowCellValue(e.RowHandle,bandedGridView1.Columns["SLThua"], slKK - slss);
                    bandedGridView1.SetRowCellValue(e.RowHandle, bandedGridView1.Columns["SLThieu"], 0);
                }
                else
                {
                    bandedGridView1.SetRowCellValue(e.RowHandle, bandedGridView1.Columns["SLThieu"],slss -slKK);
                    bandedGridView1.SetRowCellValue(e.RowHandle, bandedGridView1.Columns["SLThua"], 0);
                }
            }
            //cập nhật lại edit list
            if (!arrCapNhat.Contains( e.RowHandle ))
            {
                arrCapNhat.Add(e.RowHandle);
            }
        }
        private Boolean KiemTraTongCCL()
        {
            double sl1 = Convert.ToDouble(bandedGridView1.GetFocusedRowCellValue("SLCCL1"));
            double sl2 = Convert.ToDouble(bandedGridView1.GetFocusedRowCellValue("SLCCL2"));
            double sl3a = Convert.ToDouble(bandedGridView1.GetFocusedRowCellValue("SLCCL3"));
            double sl3b = Convert.ToDouble(bandedGridView1.GetFocusedRowCellValue("SLCCL4"));
            double tong = (sl1 + sl2 + sl3a + sl3b); 
            double slkk = Convert.ToDouble(bandedGridView1.GetFocusedRowCellValue("SLKK"));
            if (tong == slkk) 
                return true;
            else
                return false;
        }
        private Boolean KiemTraTongPhanBo()
        {
            double slbo = Convert.ToDouble(bandedGridView1.GetFocusedRowCellValue("SLKhoBo"));
            double sldv = Convert.ToDouble(bandedGridView1.GetFocusedRowCellValue("SLKhoDV"));
            double slcs = Convert.ToDouble(bandedGridView1.GetFocusedRowCellValue("SLKhoCSSX"));
            double tong = (slbo + sldv + slcs);
            double slkk = Convert.ToDouble(bandedGridView1.GetFocusedRowCellValue("SLKK"));
            if (tong == slkk)
                return true;
            else
                return false;
        }

        private void btKiemKeLai_Click(object sender, EventArgs e)
        {
            int dotKiemKe = Convert.ToInt32(radDotKiemKe.EditValue);
            if (ThucHienKiemKe(dotKiemKe ))
            {
                ctrlKK.RefreshData();
                LayDuLieu();
            }
        }

        private void bandedGridView1_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)
        {
            BandedGridView view = (BandedGridView)sender;
            //Check whether the indicator cell belongs to a data row
            if (e.Info.IsRowIndicator && e.RowHandle >= 0)
            {
                e.Info.DisplayText = (Convert.ToInt32(e.RowHandle) + 1).ToString();
                //if (!indicatorIcon)
                e.Info.ImageIndex = -1;
            }
        }

        private void btnInBBKiemKe_Click(object sender, EventArgs e)
        {
            int dotKiemKe = Convert.ToInt32(radDotKiemKe.EditValue);
            DateTime ngayKK = new DateTime(DateTime.Now.Year, 1, 1);
            DateTime ngayOld = new DateTime(DateTime.Now.Year - 1, 1, 1);
            if (dotKiemKe != 1)
            {
                ngayKK = new DateTime(DateTime.Now.Year, 7, 1);
                ngayOld = new DateTime(DateTime.Now.Year - 1, 7, 1);
            }
            string tieuDe = "KIỂM KÊ 0 GIỜ NGÀY 01 THÁNG " + ngayKK.Month + " NĂM " + ngayKK.Year ;
            string tieuDeCotKK = "SLKK 0 GIỜ NGÀY 01 THÁNG " + ngayKK.Month + " NĂM " + ngayKK.Year;
            string tieuDeCotOld = "SLKK 0 GIỜ NGÀY 01 THÁNG " + ngayOld.Month + " NĂM " + ngayOld.Year; 
            //lấy dữ liệu đổ ra dataset
            DataTable dt = new DataTable();
            SqlParameter[] parameter = {
                new SqlParameter("dotKK",dotKiemKe)
                };
            DevEx.Thanh.Utilities.XL_DULIEU.LayDuLieuRaBangFromStoreProcedure("sp_T_LayThongTinKiemKe", ref dt, parameter);
            dt.TableName = "sp_T_LayThongTinKiemKe"; 
            DataSet ds = new DataSet();
            ds.Tables.Add(dt);
            //in báo cáo
             rptBienBanKiemKe rpt = new rptBienBanKiemKe();
            rpt.DataSource = ds;
            rpt.Parameters["tieuDe"].Value = tieuDe;
            rpt.Parameters["tieuDeCotKK"].Value = tieuDeCotKK;
            rpt.Parameters["tieuDeCotOld"].Value = tieuDeCotOld;
            //set gia tri cho no
            rpt.RequestParameters = false; //hiển thị report luôn, không cần chờ nhập parametter
            ReportPrintTool pt = new ReportPrintTool(rpt);
            pt.AutoShowParametersPanel = false; //giấu phần hiển thị cho nhập parametter
            pt.ShowPreviewDialog();
        }
        
        //private void bandedGridView1_ValidatingEditor(object sender, DevExpress.XtraEditors.Controls.BaseContainerValidateEditorEventArgs e)
        //{
        //    BandedGridView myGrid = sender as BandedGridView;
        //    switch (myGrid.FocusedColumn.Name )
        //    {
        //        case "colEditCCL1":
        //        case "colEditCCL2":
        //        case "colEditCCL3a":
        //        case "colEditCCL4":
        //            //kiểm tra xem việc cập nhật có vượt quá tổng không
        //            if (!KiemTraTongCCL() )
        //            {
        //                e.Valid = false;
        //                e.ErrorText = "Tổng các cột cấp chất lượng vượt quá số lượng kiểm kê!ESC để hủy cập nhật";
        //            }
        //            break;
        //        case "colEditKhoBo":
        //        case "colEditKhoDV":
        //        case "colEditKhoCSSX":
        //            //kiểm tra tổng
        //            if(!KiemTraTongPhanBo() )
        //            {
        //                e.Valid = false;
        //                e.ErrorText = "Tổng các cột phân bố vượt quá số lượng kiểm kê! ESC để hủy cập nhật";
        //            }
        //            break;

        //    }
        //}
        
    }
}
